home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / elk-2_0.lha / elk-2.0 / examples / scheme / dynamic-wind < prev    next >
Encoding:
Text File  |  1989-02-17  |  641 b   |  30 lines

  1. ;;; -*-Scheme-*-
  2.  
  3. (define point)
  4. (define saved #f)
  5. (define (print s) (display s) (newline))
  6.  
  7. (define (inner)
  8.   (dynamic-wind
  9.    (lambda () (print "  in"))
  10.    (lambda () (dynamic-wind
  11.            (lambda () (print "    in"))
  12.            (lambda () (if saved
  13.                   (begin (print "      throw") (point 100))
  14.                   (begin
  15.                 (call-with-current-continuation
  16.                  (lambda (x) (set! point x)))
  17.                 (print "      catch")
  18.                 (set! saved #t) #v)))
  19.            (lambda () (print "    out"))))
  20.    (lambda () (print "  out"))))
  21.  
  22. (define (outer)
  23.   (dynamic-wind
  24.    (lambda () (print 'in))
  25.    (lambda () (inner))
  26.    (lambda () (print 'out))))
  27.  
  28. (outer)
  29. (outer)
  30.